/******************************************************************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_PLOT_CURVE_3D_H
#define QWT_PLOT_CURVE_3D_H

#include "qwt_global.h"
#include "qwt_plot_seriesitem.h"

class QwtColorMap;

/*!
    \brief Curve that displays 3D points as dots, where the z coordinate is
           mapped to a color.
 */
class QWT_EXPORT QwtPlotSpectroCurve : public QwtPlotSeriesItem,
                                       public QwtSeriesStore<QwtPoint3D>
{
public:
  //! Paint attributes
  enum PaintAttribute
  {
    //! Clip points outside the canvas rectangle
    ClipPoints = 1
  };

  Q_DECLARE_FLAGS(PaintAttributes, PaintAttribute)

  explicit QwtPlotSpectroCurve(const QString &title = QString());
  explicit QwtPlotSpectroCurve(const QwtText &title);

  virtual ~QwtPlotSpectroCurve();

  virtual int rtti() const QWT_OVERRIDE;

  void setPaintAttribute(PaintAttribute, bool on = true);
  bool testPaintAttribute(PaintAttribute) const;

  void setSamples(const QVector<QwtPoint3D> &);
  void setSamples(QwtSeriesData<QwtPoint3D> *);

  void setColorMap(QwtColorMap *);
  const QwtColorMap *colorMap() const;

  void setColorRange(const QwtInterval &);
  QwtInterval &colorRange() const;

  virtual void drawSeries(QPainter *, const QwtScaleMap &xMap,
                          const QwtScaleMap &yMap, const QRectF &canvasRect,
                          int from, int to) const QWT_OVERRIDE;

  void setPenWidth(double);
  double penWidth() const;

protected:
  virtual void drawDots(QPainter *, const QwtScaleMap &xMap,
                        const QwtScaleMap &yMap, const QRectF &canvasRect,
                        int from, int to) const;

private:
  void init();

  class PrivateData;
  PrivateData *m_data;
};

Q_DECLARE_OPERATORS_FOR_FLAGS(QwtPlotSpectroCurve::PaintAttributes)

#endif
